构建循环 for
定义方式
说明
循环体不停的进行循环,直到条件表达式返回 false 时自动退出循环,执行 for 的 } 之后的语句
for 循环可以通过 break 、goto 、return 、panic 语句强制退出循环
for 初始语句; 条 件表达式; 结束语句 {
循环体代码
}
使用示例
for 中的初始语句 - 开始循环时执行的语句
说明
初始语句是在第一次循环前执行的语句,一般使用初始语句执行变量初始化,如果变量在此处被声明,其作用域将被局限在这个 for 的范畴内
setp 放在 for 循环的前面进行初始化,此时 setp 的作用域是整个 main 函数,比在初始语句中声明的 setp 作用域要大
package main
import "fmt"
func main() {
setp := 3
for ; setp > 0; setp-- {
fmt.Println(setp)
}
}
setp 放在 for 循环内部,此时 setp 的作用域仅限于 for 循环内部
package main
import "fmt"
func main() {
for setp := 3; setp > 0; setp-- {
fmt.Println(setp)
}
}
输出
3
2
1
for 中的条件表达式 - 控制是否循环的开关
结束循环时带可执行语句的无限循环
说明
for ; ; i++{} 是一个典型的无限循环,初始化部分为空,条件部分为空则表示条件恒为 true ,形成无限循环
package main
import "fmt"
func main() {
var i int
for ; ; i++ {
fmt.Println(i)
if i > 10 {
break
}
}
}
输出
0
1
2
3
4
5
6
7
8
9
10
11
无限循环
说明
i 的值始终是0,在循环内没有修改 i 的值,所以条件 i > 10 永远不会成立
package main
func main() {
var i int
for {
if i > 10 {
break
}
}
i++
}
输出
死循环,无输出,程序会一直执行
只有一个循环条件的循环
package main
func main() {
var i int
for i <= 10 {
i++
println(i)
}
}
输出
1
2
3
4
5
6
7
8
9
10
11
for 中的结束语句 - 每次循环结束时执行的语句
package main
import "fmt"
func main() {
// 遍历,决定处理第几行
for y := 1; y <= 9; y++ {
// 遍历,决定这一行有多少列
for x := 1; x <= y; x++ {
// 使用%2d来确保每个数字占2个字符位置,保持对齐
fmt.Printf("%d*%d=%2d ", x, y, x*y)
}
// 手动生成回车
fmt.Println()
}
}
输出
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
更详细的说明
package main
import "fmt"
func main() {
// 第一个部分:九九乘法表
for y := 1; y <= 9; y++ {
// 遍历,决定这一行有多少列
for x := 1; x <= y; x++ {
// 使用%2d来确保每个数字占2个字符位置,保持对齐
fmt.Printf("%d*%d=%2d ", x, y, x*y)
}
// 手动生成回车
fmt.Println()
}
// 第二个部分:外循环和内循环的调试信息
for i := 1; i <= 9; i++ {
fmt.Printf("外循环开始: i = %d, 判断条件 %d <= 9 -> true\n", i, i)
// 遍历,决定这一行有多少列
for x := 1; x <= i; x++ {
fmt.Printf(" 内循环开始: x = %d, 判断条件 %d <= %d -> true\n", x, x, i)
fmt.Printf(" 计算: %d * %d = %d\n", x, i, x*i)
fmt.Printf(" 打印: %d*%d=%d\n", x, i, x*i)
fmt.Printf(" 内循环结束: x = %d, 增加 x++\n", x)
}
// 内循环完成后,准备换行
fmt.Printf("外循环结束: i = %d, 增加 i++\n\n", i)
}
// 循环完全结束
fmt.Println("循环结束")
}
输出
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
外循环开始: i = 1, 判断条件 1 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 1 -> true
计算: 1 * 1 = 1
打印: 1*1=1
内循环结束: x = 1, 增加 x++
外循环结束: i = 1, 增加 i++
外循环开始: i = 2, 判断条件 2 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 2 -> true
计算: 1 * 2 = 2
打印: 1*2=2
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 2 -> true
计算: 2 * 2 = 4
打印: 2*2=4
内循环结束: x = 2, 增加 x++
外循环结束: i = 2, 增加 i++
外循环开始: i = 3, 判断条件 3 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 3 -> true
计算: 1 * 3 = 3
打印: 1*3=3
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 3 -> true
计算: 2 * 3 = 6
打印: 2*3=6
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 3 -> true
计算: 3 * 3 = 9
打印: 3*3=9
内循环结束: x = 3, 增加 x++
外循环结束: i = 3, 增加 i++
外循环开始: i = 4, 判断条件 4 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 4 -> true
计算: 1 * 4 = 4
打印: 1*4=4
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 4 -> true
计算: 2 * 4 = 8
打印: 2*4=8
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 4 -> true
计算: 3 * 4 = 12
打印: 3*4=12
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 4 -> true
计算: 4 * 4 = 16
打印: 4*4=16
内循环结束: x = 4, 增加 x++
外循环结束: i = 4, 增加 i++
外循环开始: i = 5, 判断条件 5 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 5 -> true
计算: 1 * 5 = 5
打印: 1*5=5
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 5 -> true
计算: 2 * 5 = 10
打印: 2*5=10
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 5 -> true
计算: 3 * 5 = 15
打印: 3*5=15
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 5 -> true
计算: 4 * 5 = 20
打印: 4*5=20
内循环结束: x = 4, 增加 x++
内循环开始: x = 5, 判断条件 5 <= 5 -> true
计算: 5 * 5 = 25
打印: 5*5=25
内循环结束: x = 5, 增加 x++
外循环结束: i = 5, 增加 i++
外循环开始: i = 6, 判断条件 6 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 6 -> true
计算: 1 * 6 = 6
打印: 1*6=6
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 6 -> true
计算: 2 * 6 = 12
打印: 2*6=12
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 6 -> true
计算: 3 * 6 = 18
打印: 3*6=18
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 6 -> true
计算: 4 * 6 = 24
打印: 4*6=24
内循环结束: x = 4, 增加 x++
内循环开始: x = 5, 判断条件 5 <= 6 -> true
计算: 5 * 6 = 30
打印: 5*6=30
内循环结束: x = 5, 增加 x++
内循环开始: x = 6, 判断条件 6 <= 6 -> true
计算: 6 * 6 = 36
打印: 6*6=36
内循环结束: x = 6, 增加 x++
外循环结束: i = 6, 增加 i++
外循环开始: i = 7, 判断条件 7 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 7 -> true
计算: 1 * 7 = 7
打印: 1*7=7
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 7 -> true
计算: 2 * 7 = 14
打印: 2*7=14
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 7 -> true
计算: 3 * 7 = 21
打印: 3*7=21
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 7 -> true
计算: 4 * 7 = 28
打印: 4*7=28
内循环结束: x = 4, 增加 x++
内循环开始: x = 5, 判断条件 5 <= 7 -> true
计算: 5 * 7 = 35
打印: 5*7=35
内循环结束: x = 5, 增加 x++
内循环开始: x = 6, 判断条件 6 <= 7 -> true
计算: 6 * 7 = 42
打印: 6*7=42
内循环结束: x = 6, 增加 x++
内循环开始: x = 7, 判断条件 7 <= 7 -> true
计算: 7 * 7 = 49
打印: 7*7=49
内循环结束: x = 7, 增加 x++
外循环结束: i = 7, 增加 i++
外循环开始: i = 8, 判断条件 8 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 8 -> true
计算: 1 * 8 = 8
打印: 1*8=8
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 8 -> true
计算: 2 * 8 = 16
打印: 2*8=16
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 8 -> true
计算: 3 * 8 = 24
打印: 3*8=24
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 8 -> true
计算: 4 * 8 = 32
打印: 4*8=32
内循环结束: x = 4, 增加 x++
内循环开始: x = 5, 判断条件 5 <= 8 -> true
计算: 5 * 8 = 40
打印: 5*8=40
内循环结束: x = 5, 增加 x++
内循环开始: x = 6, 判断条件 6 <= 8 -> true
计算: 6 * 8 = 48
打印: 6*8=48
内循环结束: x = 6, 增加 x++
内循环开始: x = 7, 判断条件 7 <= 8 -> true
计算: 7 * 8 = 56
打印: 7*8=56
内循环结束: x = 7, 增加 x++
内循环开始: x = 8, 判断条件 8 <= 8 -> true
计算: 8 * 8 = 64
打印: 8*8=64
内循环结束: x = 8, 增加 x++
外循环结束: i = 8, 增加 i++
外循环开始: i = 9, 判断条件 9 <= 9 -> true
内循环开始: x = 1, 判断条件 1 <= 9 -> true
计算: 1 * 9 = 9
打印: 1*9=9
内循环结束: x = 1, 增加 x++
内循环开始: x = 2, 判断条件 2 <= 9 -> true
计算: 2 * 9 = 18
打印: 2*9=18
内循环结束: x = 2, 增加 x++
内循环开始: x = 3, 判断条件 3 <= 9 -> true
计算: 3 * 9 = 27
打印: 3*9=27
内循环结束: x = 3, 增加 x++
内循环开始: x = 4, 判断条件 4 <= 9 -> true
计算: 4 * 9 = 36
打印: 4*9=36
内循环结束: x = 4, 增加 x++
内循环开始: x = 5, 判断条件 5 <= 9 -> true
计算: 5 * 9 = 45
打印: 5*9=45
内循环结束: x = 5, 增加 x++
内循环开始: x = 6, 判断条件 6 <= 9 -> true
计算: 6 * 9 = 54
打印: 6*9=54
内循环结束: x = 6, 增加 x++
内循环开始: x = 7, 判断条件 7 <= 9 -> true
计算: 7 * 9 = 63
打印: 7*9=63
内循环结束: x = 7, 增加 x++
内循环开始: x = 8, 判断条件 8 <= 9 -> true
计算: 8 * 9 = 72
打印: 8*9=72
内循环结束: x = 8, 增加 x++
内循环开始: x = 9, 判断条件 9 <= 9 -> true
计算: 9 * 9 = 81
打印: 9*9=81
内循环结束: x = 9, 增加 x++
外循环结束: i = 9, 增加 i++
循环结束
键值循环 - for range 直接获得对象的索引和数据
go语言可以使用 for range 遍历数组、切片、字符串、map、channel,通过 for range 遍历的返回值有一定的规律
- 数组、切片、字符串返回索引和值
- map返回键和值
- channel只返回通道内的值